Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


.gitea/workflows/build.yml 1e3eedadc8b1f196331500f41f8debd09a6c8492 (1e3eedad) Text, 7.79 KB

T8b949e# Appimage builds produced by action are broken for now
Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffRelease

Tff7b72onTb4b4b4:
Tff7b72pushTb4b4b4:
Tff7b72tagsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff*Ta5d6ff"
Tff7b72workflow_dispatchTb4b4b4:
Tff7b72inputsTb4b4b4:
Tff7b72versionTb4b4b4:
Tff7b72descriptionTb4b4b4: Ta5d6ff"Ta5d6ffReleaseTe6edf3 Ta5d6ffversionTe6edf3 Ta5d6ff(e.g.,Te6edf3 Ta5d6ffv1.0.0)Ta5d6ff"
Tff7b72requiredTb4b4b4: Ta5d6fffalse
Tff7b72typeTb4b4b4: Ta5d6ffstring
Tff7b72build_dockerTb4b4b4:
Tff7b72descriptionTb4b4b4: Ta5d6ff"Ta5d6ffBuildTe6edf3 Ta5d6ffDockerTa5d6ff"
Tff7b72requiredTb4b4b4: Ta5d6fffalse
Tff7b72defaultTb4b4b4: Ta5d6ff"Ta5d6fftrueTa5d6ff"
Tff7b72typeTb4b4b4: Ta5d6ffboolean

Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffwrite
Tff7b72packagesTb4b4b4: Ta5d6ffwrite

Tff7b72jobsTb4b4b4:
Tff7b72buildTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffRelease
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-latest
Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCloneTa5d6ff Ta5d6ffRepo
Tff7b72usesTb4b4b4: Ta5d6ffhttps://git.quad4.io/actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 T8b949e# v6.0.1
Tff7b72withTb4b4b4:
Tff7b72fetch-depthTb4b4b4: Ta5d6ff0

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDetermineTa5d6ff Ta5d6ffversion
Tff7b72idTb4b4b4: Ta5d6ffversion
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ github.event.inputs.version }}" ]; then
Tff7b72echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
Tff7b72elif [[ "${{ github.ref }}" == refs/tags/* ]]; then
Tff7b72VERSION="${GITHUB_REF#refs/tags/}"
Tff7b72if [ -z "${VERSION}" ]; then
Tff7b72VERSION="${{ github.ref_name }}"
Tff7b72fi
Tff7b72if [ "${VERSION}" = "master" ]; then
Tff7b72echo "Error: Invalid tag name '${VERSION}'. Tag name cannot be a branch name." >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72echo "version=${VERSION}" >> $GITHUB_OUTPUT
Tff7b72else
Tff7b72SHORT_SHA=$(git rev-parse --short HEAD)
Tff7b72echo "version=${SHORT_SHA}" >> $GITHUB_OUTPUT
Tff7b72fi

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffNodeJS
Tff7b72usesTb4b4b4: Ta5d6ffhttps://git.quad4.io/actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f T8b949e# v6.1.0
Tff7b72withTb4b4b4:
Tff7b72node-versionTb4b4b4: Ta5d6ff22

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffPython
Tff7b72usesTb4b4b4: Ta5d6ffhttps://git.quad4.io/actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 T8b949e# v6.1.0
Tff7b72withTb4b4b4:
Tff7b72python-versionTb4b4b4: Ta5d6ff"Ta5d6ff3.13Ta5d6ff"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffPoetry
Tff7b72runTb4b4b4: Ta5d6ffpythonTa5d6ff Ta5d6ff-mTa5d6ff Ta5d6ffpipTa5d6ff Ta5d6ffinstallTa5d6ff Ta5d6ff--upgradeTa5d6ff Ta5d6ffpipTa5d6ff Ta5d6ffpoetry>=2.0.0

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffpnpm
Tff7b72usesTb4b4b4: Ta5d6ffhttps://git.quad4.io/actions/setup-pnpm@41ff72655975bd51cab0327fa583b6e92b6d3061 T8b949e# v4
Tff7b72withTb4b4b4:
Tff7b72versionTb4b4b4: Ta5d6ff10.0.0

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffsystemTa5d6ff Ta5d6ffdependencies
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72sudo apt-get update
Tff7b72sudo apt-get install -y patchelf libopusfile0 ffmpeg espeak-ng wine nsis zip rpm flatpak flatpak-builder elfutils
Tff7b72flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetupTa5d6ff Ta5d6ffTask
Tff7b72usesTb4b4b4: Ta5d6ffhttps://git.quad4.io/actions/setup-task@0ab1b2a65bc55236a3bc64cde78f80e20e8885c2 T8b949e# v1
Tff7b72withTb4b4b4:
Tff7b72versionTb4b4b4: Ta5d6ff"Ta5d6ff3.46.3Ta5d6ff"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffdependencies
Tff7b72runTb4b4b4: Ta5d6fftaskTa5d6ff Ta5d6ffinstall

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffFrontend
Tff7b72runTb4b4b4: Ta5d6fftaskTa5d6ff Ta5d6ffbuild-frontend

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6ffwheel
Tff7b72runTb4b4b4: Ta5d6fftaskTa5d6ff Ta5d6ffwheel

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffAppTa5d6ff Ta5d6ff(Appimage)
Tff7b72runTb4b4b4: Ta5d6ffpnpmTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffdist:linux

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffAppTa5d6ff Ta5d6ff(RPM)
Tff7b72continue-on-errorTb4b4b4: Ta5d6fftrue
Tff7b72runTb4b4b4: Ta5d6fftaskTa5d6ff Ta5d6ffbuild-rpm

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffAppTa5d6ff Ta5d6ff(Flatpak)
Tff7b72continue-on-errorTb4b4b4: Ta5d6fftrue
Tff7b72runTb4b4b4: Ta5d6fftaskTa5d6ff Ta5d6ffbuild-flatpak

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffAppTa5d6ff Ta5d6ff(WindowsTa5d6ff Ta5d6ffEXETa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffNSIS)
Tff7b72runTb4b4b4: Ta5d6ffpnpmTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffdist:windows

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffAppTa5d6ff Ta5d6ff(ZIP)
Tff7b72runTb4b4b4: Ta5d6fftaskTa5d6ff Ta5d6ffbuild-zip

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffPrepareTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffassets
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72mkdir -p release-assets
Tff7b72# Collect artifacts from dist/
Tff7b72# Linux artifacts
Tff7b72find dist -maxdepth 1 -type f \( -name "*-linux*.AppImage" -o -name "*-linux*.deb" -o -name "*-linux*.rpm" -o -name "*-linux*.flatpak" \) -exec cp {} release-assets/ \;
Tff7b72# Windows artifacts
Tff7b72find dist -maxdepth 1 -type f \( -name "*-win*.exe" \) -exec cp {} release-assets/ \;
Tff7b72# ZIP artifacts from Electron Forge
Tff7b72find out/make -type f -name "*.zip" -exec cp {} release-assets/ \;
Tff7b72# Python artifacts
Tff7b72find python-dist -maxdepth 1 -type f -name "*.whl" -exec cp {} release-assets/ \;

Tff7b72# Create frontend zip
Tff7b72(cd meshchatx/public && zip -r ../../release-assets/meshchatx-frontend.zip .)

Tff7b72# Generate SBOM (CycloneDX)
Tff7b72curl -L -o /tmp/trivy.deb https://git.quad4.io/Quad4-Extra/assets/raw/commit/90fdcea1bb71d91df2de6ff2e3897f278413f300/bin/trivy_0.68.2_Linux-64bit.deb
Tff7b72sudo dpkg -i /tmp/trivy.deb || sudo apt-get install -f -y
Tff7b72trivy fs --format cyclonedx --include-dev-deps --output release-assets/sbom.cyclonedx.json .

Tff7b72# Generate checksums
Tff7b72cd release-assets
Tff7b72for file in *; do
Tff7b72if [ -f "$file" ] && [[ "$file" != *.sha256 ]]; then
Tff7b72sha256sum "$file" | tee "${file}.sha256"
Tff7b72fi
Tff7b72done

Tff7b72# Generate release notes (outside release-assets directory)
Tff7b72cd ..
Tff7b72echo "## SHA256 Checksums" > release-body.md
Tff7b72echo "" >> release-body.md
Tff7b72for file in release-assets/*; do
Tff7b72if [ -f "$file" ] && [[ "$file" != *.sha256 ]] && [[ "$file" != *release-body.md* ]]; then
Tff7b72filename=$(basename "$file")
Tff7b72if [ -f "release-assets/${filename}.sha256" ]; then
Tff7b72# Extract just the filename and its sha256 (format: <sha256> <filename>)
Tff7b72echo "\`$(cat "release-assets/${filename}.sha256")\`" >> release-body.md
Tff7b72fi
Tff7b72fi
Tff7b72done

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffValidateTa5d6ff Ta5d6ffversion
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72VERSION="${{ steps.version.outputs.version }}"
Tff7b72if [ -z "${VERSION}" ]; then
Tff7b72echo "Error: Version is empty" >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72if [ "${VERSION}" = "master" ]; then
Tff7b72echo "Error: Invalid version '${VERSION}'. Version cannot be a branch name." >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72echo "Using version: ${VERSION}"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCreateTa5d6ff Ta5d6ffRelease
Tff7b72ifTb4b4b4: Ta5d6ffgithub.event_nameTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'push'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffgithub.event_nameTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'workflow_dispatch'
Tff7b72usesTb4b4b4: Ta5d6ffhttps://git.quad4.io/actions/gitea-release-action@4875285c0950474efb7ca2df55233c51333eeb74 T8b949e# v1
Tff7b72withTb4b4b4:
Tff7b72api_urlTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.GITEA_API_URLTa5d6ff Ta5d6ff}}
Tff7b72gitea_tokenTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.GITEA_TOKENTa5d6ff Ta5d6ff}}
Tff7b72titleTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.version.outputs.versionTa5d6ff Ta5d6ff}}
Tff7b72tagTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.version.outputs.versionTa5d6ff Ta5d6ff}}
Tff7b72filesTb4b4b4: Tb4b4b4|
Tff7b72release-assets/*.AppImage
Tff7b72release-assets/*.deb
Tff7b72release-assets/*.rpm
Tff7b72release-assets/*.flatpak
Tff7b72release-assets/*.exe
Tff7b72release-assets/*.whl
Tff7b72release-assets/*.sha256
Tff7b72release-assets/*.zip
Tff7b72release-assets/sbom.cyclonedx.json
Tff7b72body_pathTb4b4b4: Ta5d6ff"Ta5d6ffrelease-body.mdTa5d6ff"
Tff7b72draftTb4b4b4: Ta5d6fffalse
Tff7b72prereleaseTb4b4b4: Ta5d6fffalse


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────